# -*- coding: utf-8 -*-
"""
@文件    :   Orders_pivot.py
@时间    :   2022/05/26 22:38:53
@作者    :   YTNetMan
@版本    :   1.0
@邮箱    :   ytnetman@163.com
@版权    :   (C)Copyright 2022-2025
@分类    :   办公自动化
@功能    :   建立数据透视表
            最基本的时间序列数据结构是时间戳
            时间序列数据可以是特定日期、持续时间或固定的自定义间隔的形式
            时间戳可以是给定日期的一天或一秒，具体取决于精度
            .to_datetime仅转换格式，.DatetimeIndex还能设置为索引
            两者在转化格式的功能上效果一样，都可以把字符串对象转换成 datetime 对象。
            pd.DatetimeIndex 是把某一列进行转换，同时把该列的数据设置为索引 index
            pivot_table有四个最重要的参数index、values、columns、aggfunc
            每个pivot_table必须拥有一个index，一般就是表的rows
            Values可以对需要的计算数据进行筛选
            Columns类似Index可以设置列层次字段，它不是一个必要参数，作为一种分割数据的可选方式
            aggfunc参数可以设置我们对数据聚合时进行的函数操作。当我们未设置aggfunc时，它默认aggfunc='mean’计算均值
            
"""

import numpy as np
import pandas as pd

orders = pd.read_excel('./doc/Orders_pivot.xlsx')
#将TimedeltaIndex添加到时间戳中来创建DatetimeIndex
#新建一个年的列，从具体的日期中取出一个年的序列
orders['Year'] = pd.DatetimeIndex(orders['Date']).year
print(orders.head())
print(orders.Date.dtype)
#为需求做透视表，第一个需求现在需要一个能统计出每年大类销售的总额
pt1 = orders.pivot_table(index='Category',columns='Year',values='Total',aggfunc=np.sum)
print(pt1)
#第二个需求统计出大类商品每年的销售总额和交易单数量
#首先把表中的大类和年数据作为一个组数据提取出来
groups = orders.groupby(['Category','Year'])
#向组中添加合计列和ID列，并计算
s=groups['Total'].sum()
c=groups['ID'].count()
pt2 = pd.DataFrame({'Sum':s,'Count':c})
print(pt2)
